package main

import (
	"fmt"

	"sync"

	"time"
)

var counter int = 0

func Count(lock *sync.Mutex) {

	lock.Lock()

	counter++

	fmt.Println(counter)

	lock.Unlock()

}

func main() {

	lock := &sync.Mutex{}

	for i := 0; i < 5; i++ {

		go Count(lock)

	}

	time.Sleep(time.Second * 5)

}

/* 2、go语言的线程通信

无论是哪种编程语言，实现多线程之间的通信方式无非是共享数据和消息两种方式。

此时，多个线程共享数据counter，实际上当业务逻辑比较复杂并且共享数据比较多的情况下，使用这种方式是一件十分头疼的事情。我们这里暂且不提这些。

2）消息机制实现多线程通信

go语言使用channel在两个或多个线程之间传递消息。channel翻译成中文就算通道的意思，我们直接看代码：
*/
